home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_08_01
/
8n01095a
< prev
next >
Wrap
Text File
|
1990-02-18
|
2KB
|
106 lines
*****Listing 2*****
/*
* Bold.c - filters nroff output for terminal display
* displays bold in SO, underlines, expanded font
* copyright 1987 Ronald Florence
*/
#include <stdio.h>
#define UL 01
#define BOLD 02
#define ULSTOP 04
#define Bold() tputs(so, 1, prch), att |= BOLD
#define Stopbold() tputs(se, 1, prch), att &= ~BOLD
#define Uline() tputs(us, 1, prch), att |= UL
#define Stopuline() tputs(ue, 1, prch), att &= ~(UL|ULSTOP)
prch(c)
register char c;
{
putchar(c);
}
char *so, *se, *us, *ue;
main()
{
static char sbuf[256];
char tbuf[1024], *fill = sbuf, *tgetstr(), *getenv();
register a, c;
int i, att = 0;
if (tgetent(tbuf, getenv("TERM")) == 1 && tgetnum("sg") < 1)
{
so = tgetstr("so", &fill);
se = tgetstr("se", &fill);
us = tgetstr("us", &fill);
ue = tgetstr("ue", &fill);
}
a = getchar();
while ((c = getchar()) != EOF)
{
if (a == '_')
{
if (c == '_' && (att & UL) == 0)
Uline();
else if (c == '\b') /* nroff italics */
{
if ((a = getchar()) == EOF)
a = 0;
c = getchar();
if ((att & UL) == 0)
Uline();
}
if (c != '_' && (att & UL))
/* c is the last underline */
att |= ULSTOP;
}
else if (c == '\b')
{
if ((c = getchar()) != a)
{ /* Not a bold: print the character
and pass the \b to be printed. */
putout(a);
a = '\b';
}
else
{
if ((att & BOLD) == 0)
Bold();
for (i = 0; i < 5; i++)
if ((c = getchar()) != a && c != '\b')
break;
}
}
else if (att & BOLD)
Stopbold();
putout(a);
if (att & ULSTOP)
Stopuline();
a = c;
}
}
putout(c)
register char c;
{
static int expanded;
if (c == 07) /* ^G signals expanded font */
{
expanded++;
return(0);
}
putchar(c);
if (expanded)
{
if (c == '\n')
expanded = 0;
else
putchar(' ');
}
}